#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>

typedef _Bool Map;
typedef struct POSITION Position;
typedef struct QUEUE Queue;
typedef int ElementType;

int cros;

#define LAKESIZE 100.0f
#define DIAMETER 15.0f
#define NODES (cros+2)
#define ISLAND_IDX (cros)
#define CORNER_IDX (cros+1)

struct POSITION{
	double x;
	double y;
};

struct QUEUE{
	ElementType elm;
	Queue *next;
	Queue *tail; 
};

double disCroBetCro(Position,Position);
double disCroBetCorn(Position);
double disIslandCro(Position);
double abs_f(double);
Queue *QueueInit(void);
_Bool QueueEmpty(Queue*);
void EnQueue(Queue*,ElementType);
ElementType DeQueue(Queue*);
Queue * BFS(int n,Map(*)[n],int);

int main(void){
	int gaps;
	scanf("%d %d",&cros,&gaps);
	Position cro_pos[cros];
	Map map[NODES][NODES];
	for(int i=0;i<cros;i++){
		scanf("%lf %lf",&cro_pos[i].x,&cro_pos[i].y);
	}
	for(int i=0;i<NODES;i++)
		for(int j=0;j<NODES;j++)
			map[i][j]=false;
	for(int i=0;i<cros;i++){
		for(int j=i+1;j<cros;j++){
			if( disCroBetCro(cro_pos[i],cro_pos[j]) <= gaps )
				map[i][j]=map[j][i]=true;
		}
	}
	for(int i=0;i<cros;i++){
		if( disIslandCro(cro_pos[i]) <= gaps ){
			map[i][ISLAND_IDX]=map[ISLAND_IDX][i]=true;
		}
	}
	for(int i=0;i<cros;i++){
		if( disCroBetCorn(cro_pos[i]) <= gaps ){
			map[i][CORNER_IDX]=map[CORNER_IDX][i]=true;
		}
	}
	if( 85.0 <= gaps ){
		map[CORNER_IDX][ISLAND_IDX]=map[ISLAND_IDX][CORNER_IDX]=true;
	}
	Queue *r=BFS(NODES,map,ISLAND_IDX);
	ElementType e;
	_Bool escape=false;
	while( !QueueEmpty(r) ){
		e=DeQueue(r);
		if( CORNER_IDX == e ){
			//printf("Yes\n");
			escape=true;
			break;
		}
		//printf("There is a %d\n",e);
	}
	if( escape )
		printf("Yes\n");
	else
		printf("No\n");
	return 0;
}

double disCroBetCro(Position cro1,Position cro2){
	double x=abs_f(cro1.x-cro2.x);
	double y=abs_f(cro1.y-cro2.y);
	return sqrt(x*x+y*y);
}
double disCroBetCorn(Position cro){
	return (LAKESIZE/2)- (abs_f(cro.x)>abs_f(cro.y)?abs_f(cro.x):abs_f(cro.y));
}
double disIslandCro(Position cro){
	Position p1={.x=0.0,.y=0.0};
	return disCroBetCro(cro,p1)-(DIAMETER/2);
}
double abs_f(double d){
	return (d<0?-d:d);
}
Queue *QueueInit(void){
	Queue *ret=malloc(sizeof(Queue));
	ret->next=NULL;
	ret->tail=ret;
	return ret;
}
_Bool QueueEmpty(Queue* q){
	if( q->next )
		return false;
	return true;
}
void EnQueue(Queue *q,ElementType elm){
	Queue *new=malloc(sizeof(Queue));
	new->elm=elm;
	new->next=NULL;
	q->tail->next=new;
	q->tail=new;
	return;
}
ElementType DeQueue(Queue *q){
	ElementType e=q->next->elm;
	Queue *tmp=q->next;
	q->next=q->next->next;
	free(tmp);
	if( !(q->next) )
		q->tail=q;
	return e;
}
Queue * BFS(int n,Map (*map)[n],int index){
	_Bool visited[n];
	for(int i=0;i<n;i++)visited[i]=false;
	Queue *result=QueueInit();
	Queue *q=QueueInit();
	EnQueue(q,index);
	visited[index]=true;
	ElementType e;
	while( !QueueEmpty(q) ){
		e=DeQueue(q);
		EnQueue(result,e);
		for(int i=0;i<n;i++){
			if( map[e][i] && !visited[i] ){
				visited[i]=true;
				EnQueue(q,i);
			}
		}
	}
	return result;
}
